Skip to main content

Generación de un Proyecto de Animación de Habla en 3D

Introducción

Para desarrollar un proyecto donde un modelo 3D genere un discurso realista, es crucial la colaboración entre un programador web y un artista 3D. Este documento detalla los requisitos técnicos para lograr una animación de labios precisa utilizando Blend Shapes y Joins, junto con la interpretación de datos fonéticos.

Requisitos del Modelo 3D

El artista 3D debe proporcionar un modelo optimizado para animación facial, con soporte para:

  • Blend Shapes (Morph Targets): Conjunto de deformaciones predefinidas que representan posiciones de la boca para distintos fonemas.
  • Joins (Esqueletos y Huesos): Sistema de control de articulaciones faciales, en el cual los huesos manipulan la geometría del rostro para lograr la animación.

Comparación entre Blend Shapes y Joins

Blend Shapes (Morph Targets)

  • Ventajas:
    • Transiciones suaves entre expresiones faciales.
    • Ideal para sincronización labial precisa basada en fonemas.
    • Más fácil de integrar con herramientas de lip sync automatizadas como Rhubarb Lip Sync.
  • Desventajas:
    • Mayor uso de memoria si el modelo tiene muchas variaciones.
    • Requiere un modelo 3D con todas las formas de la boca predefinidas.

Joins (Esqueletos Faciales)

  • Ventajas:
    • Mayor flexibilidad y reutilización en distintos modelos.
    • Requiere menos memoria, ya que solo almacena la estructura ósea y la deformación se genera dinámicamente.
  • Desventajas:
    • Más difícil de sincronizar con fonemas de manera precisa.
    • Puede ser más complejo de integrar en motores gráficos y necesita ajustes detallados.

Explicación de Fonemas y su Representación en JSON

Para lograr una animación labial realista, se utilizan fonemas, que son unidades mínimas de sonido en el habla. Rhubarb Lip Sync genera un archivo JSON con la sincronización de estos fonemas, mapeando su duración en el tiempo.

Ejemplo de archivo JSON:

{
"metadata": {
"soundFile": "/Users/Kev/aprendizaje/react/r3f-vite-starter/./public/audios/context.wav",
"duration": 3.84
},
"mouthCues": [
{ "start": 0.00, "end": 0.09, "value": "X" },
{ "start": 0.09, "end": 0.36, "value": "B" }
]
}

Explicación de los Campos

metadata

  • soundFile: Ruta del archivo de audio analizado.
  • duration: Duración del audio en segundos.

mouthCues

Lista de objetos que definen los momentos en los que se debe modificar la forma de la boca del modelo 3D.

Cada objeto contiene:

  • start: Momento en segundos donde inicia el fonema.
  • end: Momento en segundos donde finaliza el fonema.
  • value: Letra que representa la forma de la boca asociada al fonema.

Interpretación de los Valores de value

Cada valor representa una posición específica de la boca, basada en la fonética:

  • A: Boca abierta (ej. "ah")
  • B: Boca cerrada (ej. "m", "b", "p")
  • C: Sonidos dentales (ej. "s", "z", "ch")
  • D: Sonidos labiodentales (ej. "f", "v")
  • E: Boca semiabierta (ej. "e")
  • F: Boca estirada (ej. "ee")
  • G: Movimiento labial adicional para ciertos sonidos
  • X: Boca en reposo

Implementación en Código

El siguiente código muestra cómo interpretar los valores de mouthCues y aplicarlos en un modelo 3D con Blend Shapes en Three.js Fiber:

useFrame(() => {
const currentAudioTime = audio.currentTime;

Object.values(corresponding).forEach((value) => {
nodes.Wolf3D_Head.morphTargetInfluences[
nodes.Wolf3D_Head.morphTargetDictionary[value]
] = 0;
});

for (let i = 0; i < lipsync.mouthCues.length; i++) {
const mouthCue = lipsync.mouthCues[i];
if (
currentAudioTime >= mouthCue.start &&
currentAudioTime <= mouthCue.end
) {
nodes.Wolf3D_Head.morphTargetInfluences[
nodes.Wolf3D_Head.morphTargetDictionary[corresponding[mouthCue.value]]
] = 1;
}
}
});

Conclusión

Para un proyecto de animación de habla en 3D, se recomienda usar Blend Shapes por su precisión en la sincronización labial con fonemas. La colaboración entre el artista 3D y el programador es clave para definir y mapear correctamente las expresiones faciales del modelo en base a archivos JSON generados por herramientas como Rhubarb Lip Sync.